package cn.com.dcsgo.service;

import cn.com.dcsgo.common.PageInfo;
import cn.com.dcsgo.domain.dto.SysUserQueryDTO;
import cn.com.dcsgo.domain.dto.SysUserSaveDTO;
import cn.com.dcsgo.domain.dto.SysUserUpdateDTO;
import cn.com.dcsgo.domain.po.SysUser;

import java.util.List;

/**
 * SysUserService
 *
 * @author Dcsgo
 * @since 20/5/2025 下午 3:23
 */

public interface SysUserService extends SysBaseService<SysUser> {
    /**
     * 通过用户名和密码获取用户信息
     *
     * @param username 用户名
     * @param password 密码
     * @return 存在则返回用户信息，不存在返回 null
     */
    SysUser getOne(String username, String password);

    /**
     * 通过用户ID获取一个包含部门名和直属领导名的用户信息
     *
     * @param userId 用户ID
     * @return 包含部门名和直属领导名的用户信息，用户不存在返回 null
     */
    SysUser getOneWithDeptNameAndLeaderName(Long userId);

    /**
     * 获取所有权限(菜单类型为2)
     *
     * @return 所有有效权限
     */
    List<String> getAllPermission();

    /**
     * 根据用户ID获取用户的所有权限
     *
     * @param userId 用户ID
     * @return 用户的所有有效权限
     */
    List<String> getPermissions(Long userId);

    /**
     * 分页条件查询用户信息
     *
     * @param pageInfo 分页参数和查询条件
     * @return 分页结果
     */
    PageInfo<SysUser, SysUserQueryDTO> page(PageInfo<SysUser, SysUserQueryDTO> pageInfo);

    /**
     * 添加用户
     *
     * @param saveDTO 用户信息
     * @return 受影响的行数
     */
    int add(SysUserSaveDTO saveDTO);

    /**
     * 修改用户信息
     *
     * @param updateDTO 用户信息
     * @return 受影响的行数
     */
    int update(SysUserUpdateDTO updateDTO);

    /**
     * 根据用户id删除用户，其角色关联表中的数据也将被删除
     *
     * @param userId 用户id
     * @return 受影响的行数
     */
    int remove(Long userId);

    /**
     * 重置用户密码为默认密码
     *
     * @param userId 用户id
     * @return 受影响的行数
     */
    int resetPassword(Long userId);
}
